package com.aaa.forum.dao;

import com.aaa.forum.model.Subscribe;
import com.aaa.forum.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface SubscribeMapper {
    int insert(Subscribe row);

    int insertSelective(Subscribe row);

    Subscribe selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(Subscribe row);

    int updateByPrimaryKey(Subscribe row);

    /**
     * 根据用户id和被订阅用户id，查询订阅记录
     * @param userId            用户id
     * @param subscribedUserId  被订阅id
     * @return                  订阅记录
     */
    Subscribe selectByTwoUserId(@Param("userId") Long userId, @Param("subscribedUserId") Long subscribedUserId);

    /**
     * 获取关注状态
     * @param userId            用户id
     * @param subscribedUserId  被订阅id
     */
    Byte getState(@Param("userId") Long userId, @Param("subscribedUserId") Long subscribedUserId);

    /**
     * 获取该用户的关注数量
     * @param userId    用户id
     */
    Long getSubscribeCount(@Param("userId") Long userId);

    /**
     * 获取该用户的粉丝数量
     * @param userId    用户id
     */
    Long getFanCount(@Param("userId") Long userId);

    /**
     * 获取该用户的粉丝列表
     * @param userId    用户id
     */
    List<User> getFanList(@Param("userId") Long userId);

    /**
     * 获取该用户的关注列表
     * @param userId    用户id
     */
    List<User> getSubscribeList(@Param("userId") Long userId);
}